home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 676-700 / 681 / term / source.lha / HotkeyPanel.c < prev    next >
C/C++ Source or Header  |  1992-05-09  |  10KB  |  335 lines

  1. /*
  2. **    $Id: HotkeyPanel.c,v 1.4 92/04/21 16:58:54 olsen Sta Locker: olsen $
  3. **    $Revision: 1.4 $
  4. **    $Date: 92/04/21 16:58:54 $
  5. **
  6. **    Editing panel for hotkey configuration
  7. **
  8. **    Copyright © 1990-1992 by Olaf `Olsen' Barthel & MXM
  9. **        All Rights Reserved
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. enum    {    GAD_TERMTOFRONT,GAD_BUFFERTOFRONT,GAD_SKIP,GAD_PRIORITY,
  15.         GAD_SOMEHOTKEYS,GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL };
  16.  
  17. #define WIDTH    519
  18. #define HEIGHT    98
  19.  
  20.     /* Some layout assistance. */
  21.  
  22. #define GADGET_WIDTH    88
  23. #define GADGET_COUNT    4
  24. #define GADGET_SPACE    (GADGET_WIDTH + ((WIDTH - 20) - (GADGET_COUNT * GADGET_WIDTH)) / (GADGET_COUNT - 1))
  25.  
  26. STATIC struct Gadget *
  27. CreateAllGadgets(struct Hotkeys *Hotkeys,struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  28. {
  29.     struct Gadget        *Gadget;
  30.     struct NewGadget     NewGadget;
  31.     LONG             Counter = 0;
  32.  
  33.     memset(&NewGadget,0,sizeof(struct NewGadget));
  34.  
  35.     if(Gadget = CreateContext(GadgetList))
  36.     {
  37.         NewGadget . ng_Width        = 300;
  38.         NewGadget . ng_Height        = 14;
  39.         NewGadget . ng_GadgetText    = LocaleString(MSG_HOTKEYPANEL_TERM_SCREEN_TO_FRONT_GAD);
  40.         NewGadget . ng_TextAttr        = &DefaultFont;
  41.         NewGadget . ng_VisualInfo    = VisualInfo;
  42.         NewGadget . ng_GadgetID        = Counter;
  43.         NewGadget . ng_LeftEdge        = (GadToolsLongestString(MSG_HOTKEYPANEL_TERM_SCREEN_TO_FRONT_GAD,MSG_HOTKEYPANEL_HOTKEYS_ENABLED_GAD) + 2 - 1) * 8 + 1;
  44.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  45.  
  46.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  47.             GT_Underscore,    '_',
  48.             GTST_MaxChars,    255,
  49.             GTST_String,    Hotkeys -> termScreenToFront,
  50.             GTST_EditHook,    &CommandHook,
  51.             GA_Immediate,    TRUE,
  52.         TAG_DONE);
  53.  
  54.         NewGadget . ng_GadgetText    = LocaleString(MSG_HOTKEYPANEL_BUFFER_SCREEN_TO_FRONT_GAD);
  55.         NewGadget . ng_GadgetID        = Counter;
  56.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  57.  
  58.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  59.             GT_Underscore,    '_',
  60.             GTST_MaxChars,    255,
  61.             GTST_String,    Hotkeys -> BufferScreenToFront,
  62.             GTST_EditHook,    &CommandHook,
  63.             GA_Immediate,    TRUE,
  64.         TAG_DONE);
  65.  
  66.         NewGadget . ng_GadgetText    = LocaleString(MSG_HOTKEYPANEL_SKIP_DIAL_ENTRY_GAD);
  67.         NewGadget . ng_GadgetID        = Counter;
  68.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  69.  
  70.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  71.             GT_Underscore,    '_',
  72.             GTST_MaxChars,    255,
  73.             GTST_String,    Hotkeys -> SkipDialEntry,
  74.             GTST_EditHook,    &CommandHook,
  75.             GA_Immediate,    TRUE,
  76.         TAG_DONE);
  77.  
  78.         NewGadget . ng_GadgetText    = LocaleString(MSG_HOTKEYPANEL_COMMODITY_PRIORITY_GAD);
  79.         NewGadget . ng_GadgetID        = Counter;
  80.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  81.         NewGadget . ng_Width        = 100;
  82.         NewGadget . ng_Height        = 10;
  83.  
  84.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  85.             GT_Underscore,        '_',
  86.             GTSL_Min,        -128,
  87.             GTSL_Max,        127,
  88.             GTSL_Level,        Hotkeys -> CommodityPriority,
  89.             GTSL_LevelFormat,    "%4ld",
  90.             GTSL_MaxLevelLen,    4,
  91.         TAG_DONE);
  92.  
  93.         NewGadget . ng_Width        = 26;
  94.         NewGadget . ng_GadgetText    = LocaleString(MSG_HOTKEYPANEL_HOTKEYS_ENABLED_GAD);
  95.         NewGadget . ng_GadgetID        = Counter;
  96.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  97.         NewGadget . ng_Height        = 11;
  98.  
  99.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  100.             GT_Underscore,    '_',
  101.             GTCB_Checked,    Hotkeys -> HotkeysEnabled,
  102.         TAG_DONE);
  103.  
  104.         NewGadget . ng_Width        = 88;    /* NEW 52 */
  105.         NewGadget . ng_Height        = 12;
  106.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  107.         NewGadget . ng_GadgetID        = Counter;
  108.         NewGadget . ng_Flags        = 0;
  109.         NewGadget . ng_LeftEdge        = 10;
  110.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height;
  111.  
  112.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  113.             GT_Underscore,    '_',
  114.         TAG_DONE);
  115.  
  116.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_LOAD_GAD);
  117.         NewGadget . ng_GadgetID        = Counter;
  118.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + GADGET_SPACE;
  119.  
  120.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  121.             GT_Underscore,    '_',
  122.         TAG_DONE);
  123.  
  124.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_SAVE_GAD);
  125.         NewGadget . ng_GadgetID        = Counter;
  126.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + GADGET_SPACE;
  127.  
  128.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  129.             GT_Underscore,    '_',
  130.         TAG_DONE);
  131.  
  132.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  133.         NewGadget . ng_GadgetID        = Counter;
  134.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + GADGET_SPACE;
  135.  
  136.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  137.             GT_Underscore,    '_',
  138.         TAG_DONE);
  139.     }
  140.  
  141.     return(Gadget);
  142. }
  143.  
  144. BYTE
  145. HotkeyPanel(struct Hotkeys *Hotkeys)
  146. {
  147.     struct Hotkeys         PrivateHotkeys;
  148.     struct Window        *PanelWindow;
  149.     struct Gadget        *GadgetList = NULL;
  150.     struct Gadget        *GadgetArray[GAD_CANCEL + 1];
  151.  
  152.     struct FileRequest    *FileRequest;
  153.     UBYTE             DummyBuffer[256],*DummyChar;
  154.  
  155.     CopyMem(Hotkeys,&PrivateHotkeys,sizeof(struct Hotkeys));
  156.  
  157.     if(CreateAllGadgets(Hotkeys,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  158.     {
  159.         if(PanelWindow = OpenWindowTags(NULL,
  160.             WA_Left,    (Screen -> Width - WIDTH) >> 1,
  161.             WA_Top,        (Screen -> Height - HEIGHT) >> 1,
  162.             WA_Width,    WIDTH,
  163.             WA_Height,    HEIGHT,
  164.  
  165.             WA_Activate,    TRUE,
  166.             WA_DragBar,    TRUE,
  167.             WA_DepthGadget,    TRUE,
  168.             WA_RMBTrap,    TRUE,
  169.             WA_DepthGadget,    TRUE,
  170.             WA_CloseGadget,    TRUE,
  171.             WA_CustomScreen,Screen,
  172.  
  173.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | STRINGIDCMP | SLIDERIDCMP | CHECKBOXIDCMP | BUTTONIDCMP,
  174.  
  175.             WA_Title,    LocaleString(MSG_HOTKEYPANEL_HOTKEY_PREFERENCES_TXT),
  176.         TAG_DONE))
  177.         {
  178.             struct IntuiMessage    *Massage;
  179.             ULONG             Class,Code;
  180.             struct Gadget        *Gadget;
  181.             BYTE             Terminated = FALSE;
  182.  
  183.             PushWindow(PanelWindow);
  184.  
  185.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  186.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  187.             GT_RefreshWindow(PanelWindow,NULL);
  188.  
  189.             ActiveGadget = NULL;
  190.  
  191.             while(!Terminated)
  192.             {
  193.                 WaitPort(PanelWindow -> UserPort);
  194.  
  195.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  196.                 {
  197.                     Class    = Massage -> Class;
  198.                     Code    = Massage -> Code;
  199.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  200.  
  201.                     GT_ReplyIMsg(Massage);
  202.  
  203.                     if(Class == IDCMP_VANILLAKEY)
  204.                         KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&Class,&Code);
  205.  
  206.                     if(Class == IDCMP_GADGETDOWN)
  207.                     {
  208.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  209.                             ActiveGadget = Gadget;
  210.                     }
  211.  
  212.                     if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
  213.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  214.  
  215.                     if(Class == IDCMP_CLOSEWINDOW)
  216.                     {
  217.                         CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  218.  
  219.                         Terminated = TRUE;
  220.                     }
  221.  
  222.                     if(Class == IDCMP_MOUSEMOVE)
  223.                         Hotkeys -> CommodityPriority = (WORD)Code;
  224.  
  225. GadCheck:                if(Class == IDCMP_GADGETUP)
  226.                     {
  227.                         switch(Gadget -> GadgetID)
  228.                         {
  229.                             case GAD_TERMTOFRONT:    strcpy(Hotkeys -> termScreenToFront,GT_STRING(Gadget));
  230.                                         break;
  231.  
  232.                             case GAD_BUFFERTOFRONT:    strcpy(Hotkeys -> BufferScreenToFront,GT_STRING(Gadget));
  233.                                         break;
  234.  
  235.                             case GAD_SKIP:        strcpy(Hotkeys -> SkipDialEntry,GT_STRING(Gadget));
  236.                                         break;
  237.  
  238.                             case GAD_LOAD:        strcpy(DummyBuffer,LastKeys);
  239.  
  240.                                         DummyChar = PathPart(DummyBuffer);
  241.  
  242.                                         *DummyChar = 0;
  243.  
  244.                                         BlockWindow(PanelWindow);
  245.  
  246.                                         if(FileRequest = GetFile(LocaleString(MSG_HOTKEYPANEL_LOAD_HOTKEYS_TXT),DummyBuffer,FilePart(LastKeys),DummyBuffer,"term#?",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT)))
  247.                                         {
  248.                                             if(ReadIFFData(DummyBuffer,Hotkeys,sizeof(struct Hotkeys),'HOTK'))
  249.                                                 MyEasyRequest(Window,LocaleString(MSG_HOTKEYPANEL_COULD_NOT_LOAD_HOTKEYS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  250.                                             else
  251.                                             {
  252.                                                 strcpy(LastKeys,DummyBuffer);
  253.  
  254.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_TERMTOFRONT],PanelWindow,NULL,
  255.                                                     GTST_String,Hotkeys -> termScreenToFront,
  256.                                                 TAG_DONE);
  257.  
  258.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_BUFFERTOFRONT],PanelWindow,NULL,
  259.                                                     GTST_String,Hotkeys -> BufferScreenToFront,
  260.                                                 TAG_DONE);
  261.  
  262.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SKIP],PanelWindow,NULL,
  263.                                                     GTST_String,Hotkeys -> SkipDialEntry,
  264.                                                 TAG_DONE);
  265.  
  266.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PRIORITY],PanelWindow,NULL,
  267.                                                     GTSL_Level,Hotkeys -> CommodityPriority,
  268.                                                 TAG_DONE);
  269.  
  270.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PRIORITY],PanelWindow,NULL,
  271.                                                     GTCB_Checked,Hotkeys -> HotkeysEnabled,
  272.                                                 TAG_DONE);
  273.                                             }
  274.                                         }
  275.  
  276.                                         ReleaseWindow(PanelWindow);
  277.  
  278.                                         break;
  279.  
  280.                             case GAD_SAVE:        strcpy(DummyBuffer,LastKeys);
  281.  
  282.                                         DummyChar = PathPart(DummyBuffer);
  283.  
  284.                                         *DummyChar = 0;
  285.  
  286.                                         BlockWindow(PanelWindow);
  287.  
  288.                                         Hotkeys -> HotkeysEnabled = GT_CHECKED(GadgetArray[GAD_SOMEHOTKEYS]);
  289.  
  290.                                         if(FileRequest = GetFile(LocaleString(MSG_HOTKEYPANEL_SAVE_HOTKEYS_TXT),DummyBuffer,FilePart(LastKeys),DummyBuffer,"term#?",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT)))
  291.                                         {
  292.                                             if(!WriteIFFData(DummyBuffer,Hotkeys,sizeof(struct Hotkeys),'HOTK'))
  293.                                                 MyEasyRequest(Window,LocaleString(MSG_HOTKEYPANEL_COULD_NOT_SAVE_HOTKEYS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  294.                                             else
  295.                                                 strcpy(LastKeys,DummyBuffer);
  296.                                         }
  297.  
  298.                                         ReleaseWindow(PanelWindow);
  299.  
  300.                                         break;
  301.  
  302.                             case GAD_USE:        Terminated = TRUE;
  303.  
  304.                                         Hotkeys -> HotkeysEnabled = GT_CHECKED(GadgetArray[GAD_SOMEHOTKEYS]);
  305.  
  306.                                         break;
  307.  
  308.                             case GAD_CANCEL:    Terminated = TRUE;
  309.  
  310.                                         CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  311.  
  312.                                         break;
  313.  
  314.                             default:        break;
  315.                         }
  316.                     }
  317.                 }
  318.             }
  319.  
  320.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  321.  
  322.             PopWindow();
  323.  
  324.             CloseWindow(PanelWindow);
  325.         }
  326.     }
  327.  
  328.     FreeGadgets(GadgetList);
  329.  
  330.     if(memcmp(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys)))
  331.         return(TRUE);
  332.     else
  333.         return(FALSE);
  334. }
  335.